from datetime import datetime, timedelta
from django.contrib import admin
from django.template.defaultfilters import date, timesince
from reversion import VersionAdmin

from gente.models import (
    Empleado, Cliente, Huesped, Proveedor, RegistroDeActividad)
from gente.forms import EmpleadoAdminForm, ClienteAdminForm


class EmpleadoAdmin(VersionAdmin):
    form = EmpleadoAdminForm
    list_display = 'dni', 'apellido', 'nombre', 'cargo', 'cantidad_de_hijos'
    list_filter = 'cargo',
    search_fields = 'user__last_name', 'user__first_name', 'cargo', 'user__username'
    fieldsets = (
        (u'Datos personales', {
            'fields': ('dni', ('apellido', 'nombre'), 'cantidad_de_hijos')}),
        (u'Datos de contacto', {
            'fields': ('domicilio', ('localidad', 'provincia'), ('telefono', 'email'))}),
        (u'Datos laborales', {'fields': ('cargo',)}))

admin.site.register(Empleado, EmpleadoAdmin)


class ClienteAdmin(VersionAdmin):
    form = ClienteAdminForm

admin.site.register(Cliente, ClienteAdmin)


class RegistroDeActividadAdmin(admin.ModelAdmin):
    list_display = 'fecha_y_hora', 'empleado', 'actividad'
    search_fields = ('user__first_name', 'user__last_name',
                     'user__username', 'change_message', 'object_repr')
    readonly_fields = ('action_time', 'user', 'content_type', 'object_id',
                       'object_repr', 'action_flag', 'change_message')

    def fecha_y_hora(self, obj):
        ayer = datetime.now() - timedelta(days=1)
        action_time = obj.action_time
        if obj.action_time < ayer:
            return date(obj.action_time, 'j \d\e F \d\e Y, H:i')
        return u'Hace %s' % timesince(obj.action_time)

    def empleado(self, obj):
        usuario = obj.user
        if usuario.empleado_set.exists():
            empleado = usuario.empleado_set.all()[0]
            return u'%s %s' % (empleado.apellido, empleado.nombre)
        return u'%s %s' % (usuario.last_name, usuario.first_name)

    def actividad(self, obj):
        return unicode(obj)

admin.site.register(RegistroDeActividad, RegistroDeActividadAdmin)


admin.site.register(Huesped)
admin.site.register(Proveedor)
